package createModel.singletonMode;

/**
 * 功能描述: 单例模式+ volatile + 双重检查  避免指令重排
 * 2024/03/13
 * <p>
 * ZhangYi
 */
public class VolatileSingleton {

    private static volatile VolatileSingleton INSTANCE = new VolatileSingleton();
    private VolatileSingleton(){

    }

    public static VolatileSingleton getInstance(){
        if (INSTANCE == null){
            synchronized (VolatileSingleton.class){
                if (INSTANCE == null){
                    INSTANCE = new VolatileSingleton(); // 但是这里不是一个原子性的操作
                    /**
                     * 1. 分配内存空间
                     * 2. 执行构造方法,初始化对象
                     * 3. 把这个对象指向这个空间
                         * 123
                         * 132
                     */
                }
            }
        }

        return INSTANCE;
    }
}
